//定义一个狗类
//
//class  Dog{
//    //类  ————  属性/字段。成员变量。静态属性
//    public String name;
//    public int age;
//    public String color;
//
//    //动态属性————行为————对象
//
//    public void barkdog(){
//        System.out.println(name+"汪汪汪。。。。。。");
//    }
//    public void wagdog(){
//        System.out.println(name+"摇尾巴");
//    }
//
//    public static void main(String[] args) {
//        Dog dog = new Dog();
//        dog.name = "小黄";
//        dog.color = "黄色";
//        dog.age = 10;
//        dog.barkdog();
//        dog.wagdog();
//        System.out.println(dog.age + "岁的" + dog.name + "是" + dog.color);
//    }
//}


//写一个类————Date
// class Date {
//    //属性、字段、成员变量
//    public int year;
//    public int month;
//    public int day;
//
//    public void SetDate(int year, int m, int d)//这里有隐藏的this Date
//    {
//        this.year = year;//this代表当前对象的引用
//        this.month = m;
//        this.day = d;
//    }
//
//    public void SprintDate() {
//        System.out.println(this.year + "年" + this.month + "月" + this.day + "日");//习惯要写上this(隐藏的）
//    }
//
//
//    public static void main(String[] args) {
//        Date date = new Date();
//        date.SetDate(2008, 4, 28);
//        Date date1 = new Date();//实例化
//        date1.SetDate(2024, 3, 15);
//        date.SprintDate();
//        date1.SprintDate();
//    }
//}

//this的作用：

//this————访问对象的成员变量
//this————访问对象的非静态成员方法
//this————访问对象的其他构造方法

//构造方法
//写一个日期的类
//class Date
//{
//    //成员变量
//    public int year;
//    public int month;
//    public int day;
//
//    //this访问对象的其他构造方法
//    //      方法名（与类名字相同）   （形参列表）
//    //{
//    //            方法体
//    //}
//
//    //有运用到构造的重载
//    public Date (int year,int month,int day)
//    {
//        this.day=day;
//        this.month=month;
//        this.year=year;
//        System.out.println("有三个参数的构造方法。.........");
//    }
//    public Date()
//    {
//        this(2004,9,18);//this必须放在第一行
//        System.out.println("不带参数的构造方法....................");
//    }
//public void SetDate(int year,int month,int day)
//{
//    this.year=year;
//    this.month=month;
//    this.day=day;
//}
//public void PrintDate()
//{
//    System.out.println(this.year+"年"+this.month+"月"+this.day+"日");
//}
//
//    public static void main(String[] args) {
//        Date date=new Date();//       （）是什么意思？
//        date.PrintDate();
//    }
//
//}

//现有一个Data类，内部定义了属性x和y，在main方法中实例化了Data类，并计算了data对象中x和y的和。
//        但是，Data类的定义存在错误，请你将这些错误修正过来，使得main方法中的求和逻辑可以正常执行。
//import java.util.Scanner;
//
//class Data {
//
//    private int x;
//    private int y;
//
//    private Data(int x, int y) {
//        this.x = x;
//        this.y = y;
//    }
//
//    private int getX() {
//        return x;
//    }
//
//    private int getY() {
//        return y;
//    }
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        while (scanner.hasNextInt()) {
//            int x = scanner.nextInt();
//            int y = scanner.nextInt();
//            Data data = new Data(x, y);
//            System.out.println(data.getX() + data.getY());
//        }
//    }
//
//
//}
//

//class Test {
//    public String toString() {
//        System.out.print("aaa");
//        return "bbb";
//    }
//
//    public static void main(String[] args) {
//        Test test = new Test();
//        System.out.println(test);//为什么会有bbb,这里是调用的对象
//    }
//}


//课堂代码练习————对象完，继承和多态1

//静态方法中是依赖于对类，不是对象

//访问静态变量既可以通过类访问，也可以通过对象访问（不会报错）（但推挤使用前者）

//在静态方法中不能直接调用非静态的方法，需要实例化对象，通过对象来调用 即：
//class Dog{
//    private String name;
//    private  int age=200;
//
//    //静态方法：
//
//    public static int  getdog(){
//        Dog doge=new Dog();
//        //调用非静态的方法：
//        System.out.println(doge.age);
//        return doge.age;
//    }
//
//    public static void main(String[] args) {
//        System.out.println(Dog.getdog());
//    }
//}

//在非静态方法中调用静态方法————可以直接调用
//class Date{
//    private int year;
//    private int month;
//    private int day;
//
//    public void putDay()
//    {
//        //直接调用的静态方法
//        Setyear();
//    }
//    public static int Setyear() {
//        return 2005;
//    }
//
//    public static void main(String[] args) {
//        Date date=new Date();
//    }
//}

//static 修饰变量——静态变量
//静态变量一般是静态通过静态方法进行调用

//class Student{
//    private static String name="lihuai";
//
//    //静态变量的调用
//    public static String setStudent(){
//        return name;
//    }
//
//    public static void main(String[] args) {
//        System.out.println(Student.setStudent());
//    }
//}

//关于静态成员变量的初始化：
//1.就地初始化：

//class Student{
//    private String name="huanli";
//    private int age=30;
//}

//2.通过get set初始化
//class Date{
//    private int year;
//    private int month;
//    private int day;
//    public void Setyear(int y)
//    {
//        this.year=y;
//    }
//    public int Getyear(){
//        return this.year;
//    }
//
//    public static void main(String[] args) {
//        Date date=new Date();
//        date.Setyear(3034);
//        System.out.println(date.Getyear());
//    }
//}

//3.代码块：
//   1.静态代码块
//class Dog{
//    private String name;
//    private int age;
//    static{
//        Dog dog=new Dog();
//        dog.name="小黑";
//        dog.age=2;
//        System.out.println("执行了。。。。。。。。。。。。。。。");
//        System.out.println(dog.name+dog.age+"岁");
//    }
//
//    public static void main(String[] args) {
//        Dog dog=new Dog();
//
//    }
//}

//  3.2非静态代码块/实例代码块/构造代码块
//class Cat{
//    private String name;
//    private int age;
//    {
//        this.name="旺财";
//        this.age=1;
//        System.out.println("名字："+this.name +"  "  +"年龄："+this.age);
//    }
//
//    public static void main(String[] args) {
//        Cat cat=new Cat();
//    }
//}

//静态代码块在加载类的时候被执行
//看看他们执行的先后顺序：
//class Cat{
//    private static String name;
//    private int age;
//    {
//        this.age=2;
//        this.name="huaihuai";
//        System.out.println("实例代码块..............................");
//    }
//    static{
//        name="luck";
//        System.out.println("静态代码块。。。。。。。。。。。。。。。。。。");
//    }
//
//   public void putcat()
//    {
//        System.out.println("姓名："+this.name+" "+"年龄："+this.age);
//    }
//
//    public static void main(String[] args) {
//        Cat cat=new Cat();
//        cat.putcat();
//    }
//}

//结果：
//顺序：静态代码块——》实例代码块

//如果都是静态代码块 ——》 顺序和  先后顺序有关
//如果都是实例代码块 ——》顺序和   先后顺序有关
